import random


# 1. 全局初始化银行并预设用户数据（全局变量）
bank = {
    "name": "中国农业银行昌平沙河支行",
    "users": {
        # 预设用户1：账号10000001
        "10000001": {
            "账号": "10000001",
            "账户类型": 1,
            "姓名": "张三",
            "密码": 123456,
            "地址": {
                "国家": "中国",
                "省份": "北京市",
                "街道": "海淀区中关村大街",
                "门牌号": "1号"
            },
            "存款余额": 5000000,
            "开户行": "中国农业银行昌平沙河支行"
        },
        # 预设用户2：账号10000002
        "10000002": {
            "账号": "10000002",
            "账户类型": 2,
            "姓名": "李四",
            "密码": 654321,
            "地址": {
                "国家": "中国",
                "省份": "山东省",
                "街道": "济南市历下区泉城路",
                "门牌号": "100号"
            },
            "存款余额": 10000000,
            "开户行": "中国农业银行昌平沙河支行"
        }
    }
}


# 2. 所有业务函数不再传入bank参数，直接使用全局bank
def generate_account_id():
    # 生成8位不重复账号（直接访问全局bank["users"]）
    while True:
        account_id = str(random.randint(10000000, 99999999))
        if account_id not in bank["users"]:
            return account_id


def open_account(user_info):
    # 开户函数：直接使用全局bank
    if len(bank["users"]) >= 100:
        return 3
    account_id = generate_account_id()
    if account_id in bank["users"]:
        return 2
    user = {
        "账号": account_id,
        "账户类型": user_info["账户类型"],
        "姓名": user_info["姓名"],
        "密码": user_info["密码"],
        "地址": user_info["地址"],
        "存款余额": user_info["存款余额"],
        "开户行": user_info["开户行"]
    }
    bank["users"][account_id] = user  # 直接操作全局bank
    return (1, account_id)


def save_money(account_id, amount):
    # 存钱函数：直接使用全局bank
    if account_id not in bank["users"] or amount <= 0:
        return False
    bank["users"][account_id]["存款余额"] += amount
    return True


def get_money(account_id, password, amount):
    # 取钱函数：直接使用全局bank
    if account_id not in bank["users"]:
        return 1
    user = bank["users"][account_id]
    if user["密码"] != password:
        return 2
    if amount <= 0 or user["存款余额"] < amount:
        return 3
    user["存款余额"] -= amount
    return 0


def transfer(from_id, to_id, password, amount):
    # 转账函数：直接使用全局bank
    if from_id not in bank["users"] or to_id not in bank["users"]:
        return 1
    from_user = bank["users"][from_id]
    if from_user["密码"] != password:
        return 2
    if amount <= 0 or from_user["存款余额"] < amount:
        return 3
    from_user["存款余额"] -= amount
    bank["users"][to_id]["存款余额"] += amount
    return 0


def query(account_id, password):
    # 查询函数：直接使用全局bank
    if account_id not in bank["users"]:
        print("该用户不存在。")
        return
    user = bank["users"][account_id]
    if user["密码"] != password:
        print("密码不正确。")
        return
    address = user["地址"]
    address_str = f"{address['国家']} {address['省份']} {address['街道']} {address['门牌号']}"
    print(f"当前账号：{user['账号']}")
    print(f"密码：{user['密码']}")
    print(f"余额：{user['存款余额']}元")
    print(f"用户居住地址：{address_str}")
    print(f"当前账户的开户行：{user['开户行']}")


def atm_interface():
    # ATM界面函数：无需接收bank参数，直接使用全局bank
    while True:
        print("\n****************************************")
        print("*       中国农业银行账户管理系统       *")
        print("****************************************")
        print("*                选项                  *")
        print("****************************************")
        print("*                1.开户                 *")
        print("*                2.存钱                 *")
        print("*                3.取钱                 *")
        print("*                4.转账                 *")
        print("*                5.查询                 *")
        print("*                6.Bye                 *")
        print("****************************************")

        choice = input("请输入操作选项（1-6）：")
        try:
         if choice == "1":
            user_info = {
                "账户类型": int(input("请输入账户类型（1或2）：")),
                "姓名": input("请输入姓名："),
                "密码": int(input("请输入6位密码：")),
                "地址": {
                    "国家": input("请输入国家："),
                    "省份": input("请输入省份："),
                    "街道": input("请输入街道："),
                    "门牌号": input("请输入门牌号：")
                },
                "存款余额": int(input("请输入初始存款：")),
                "开户行": "中国农业银行昌平沙河支行"
            }
            result = open_account(user_info)  # 不传入bank参数
            if result == 3:
                print("开户失败：用户库已满。")
            elif result == 2:
                print("开户失败：用户已存在。")
            else:
                print(f"开户成功！您的账号是：{result[1]}")

         elif choice == "2":
            account_id = input("请输入账号：")
            amount = int(input("请输入存钱金额："))
            if save_money(account_id, amount):  # 不传入bank参数
                print("存钱成功。")
            else:
                print("存钱失败（账号不存在或金额无效）。")

        # 其他选项（取钱、转账、查询等）的调用方式相同，均不传入bank参数
         elif choice == "3":
            account_id = input("请输入账号：")
            password = int(input("请输入密码："))
            amount = int(input("请输入取钱金额："))
            res = get_money(account_id, password, amount)
            if res == 0:
                print("取钱成功。")
            elif res == 1:
                print("取钱失败：账号不存在。")
            elif res == 2:
                print("取钱失败：密码错误。")
            else:
                print("取钱失败：余额不足。")

         elif choice == "4":
            from_id = input("请输入转出账号：")
            to_id = input("请输入转入账号：")
            password = int(input("请输入转出账号密码："))
            amount = int(input("请输入转账金额："))
            if bank["users"][from_id]["账户类型"] == 1:
                if amount > 50000:
                    print("您的账户类型最大转账金额为5万元：超过限额！转账失败！")
                    continue
            else:
                if amount > 20000:
                    print("您的账户类型最大转账金额为2万元：超过限额！转账失败！")
                    continue
            res = transfer(from_id, to_id, password, amount)
            if res == 0:
                print("转账成功。")
            elif res == 1:
                print("转账失败：账号不存在。")
            elif res == 2:
                print("转账失败：密码错误。")
            else:
                print("转账失败：余额不足。")

         elif choice == "5":
            account_id = input("请输入账号：")
            password = int(input("请输入密码："))
            query(account_id, password)  # 不传入bank参数

         elif choice == "6":
            print("感谢使用，再见！")
            break
         else:
                print("输入选项无效")
        except:
             print("无效选项，请重新输入。")


# 启动程序：直接调用ATM界面函数（无需传入bank）
atm_interface()